In large-scale virtualized system environments, system administrators typically rely on a virtual infrastructure management server (VIMS) to place virtual machines (VMs) on the various physical servers (hosts) and datastores that are present in the environment. When a VIMS “places a VM on a host,” the VIMS causes the VM to execute on that host using the host's hardware resources. When a VIMS “places a VM on a datastore,” the VIMS stores the files used by the VM (e.g., virtual disks) on the physical storage device(s) containing that datastore. A VIMS can place a VM on a host and a datastore upon initial deployment, or as a result of a migration event. In the latter case, the VIMS can move the VM from an old host to a new host (and thus place the VM on the new host), move the VM from an old datastore to a new datastore (and thus place the VM on the new datastore), or both.
Certain techniques exist that enable a VIMS to automatically place VMs on hosts based on computational load metrics (e.g., central processing unit (CPU) utilization) determined for the hosts. Further, certain techniques exist that enable a VIMS to automatically place VMs on datastores based on storage load metrics (e.g., space or input/output (I/O) capacity) determined for the datastores. However, these existing techniques focus on balancing loads across hosts or datastores, without taking into account any requirements that the VMs may have with respect to the hosts/datastores on which the VIMS places them. Further, the existing techniques that collect storage load metrics assume that the storage characteristics for a given datastore will be the same across all hosts, which may not be the case if, e.g., the hosts are connected to the storage device(s) containing the datastore in an asymmetric manner.